package org.ruoyi.interview.service;

import org.ruoyi.common.mybatis.core.page.PageQuery;
import org.ruoyi.common.mybatis.core.page.TableDataInfo;
import org.ruoyi.interview.domain.bo.InterviewQuestionCategoryBo;
import org.ruoyi.interview.domain.vo.InterviewQuestionCategoryVo;
import org.ruoyi.interview.domain.vo.InterviewQuestionCategoryWithCountVo;

import java.util.Collection;
import java.util.List;

/**
 * 面试题分类Service接口
 *
 * @author ruoyi
 */
public interface IInterviewQuestionCategoryService {

    /**
     * 查询面试题分类
     *
     * @param categoryId 分类主键
     * @return 面试题分类
     */
    InterviewQuestionCategoryVo selectInterviewQuestionCategoryById(Long categoryId);

    /**
     * 查询面试题分类列表
     *
     * @param bo 面试题分类业务对象
     * @return 面试题分类集合
     */
    List<InterviewQuestionCategoryVo> selectInterviewQuestionCategoryList(InterviewQuestionCategoryBo bo);

    /**
     * 查询面试题分类列表带面试题统计
     *
     * @param bo 面试题分类业务对象
     * @return 面试题分类集合
     */
    TableDataInfo<InterviewQuestionCategoryWithCountVo> selectInterviewQuestionCategoryListWithCount(InterviewQuestionCategoryBo bo, PageQuery pageQuery);


    /**
     * 查询面试题分类列表
     *
     * @param bo 面试题分类业务对象
     * @param pageQuery 分页参数
     * @return 面试题分类集合
     */
    TableDataInfo<InterviewQuestionCategoryVo> selectInterviewQuestionCategoryList(InterviewQuestionCategoryBo bo, PageQuery pageQuery);

    /**
     * 新增面试题分类
     *
     * @param bo 面试题分类业务对象
     * @return 结果
     */
    Boolean insertInterviewQuestionCategory(InterviewQuestionCategoryBo bo);

    /**
     * 修改面试题分类
     *
     * @param bo 面试题分类业务对象
     * @return 结果
     */
    Boolean updateInterviewQuestionCategory(InterviewQuestionCategoryBo bo);

    /**
     * 批量修改面试题分类状态
     *
     * @param categoryId 分类主键
     * @param status 状态值
     * @return 结果
     */
    Boolean updateCategoryStatus(Long categoryId, String status);

    /**
     * 批量删除面试题分类
     *
     * @param categoryIds 需要删除的面试题分类主键集合
     * @return 结果
     */
    Boolean deleteInterviewQuestionCategoryByIds(Collection<Long> categoryIds);

    /**
     * 批量更新分类排序
     *
     * @param categoryBoList 分类业务对象集合
     * @return 结果
     */
    Boolean updateOrderBatch(Collection<InterviewQuestionCategoryBo> categoryBoList);

    /**
     * 通过AI获取面试题分类
     *
     * @param parentId 父级分类ID
     * @param prompt 提示词
     * @return AI推荐的分类列表
     */
    List<String> getCategoryByAi(Long parentId, String prompt) throws Exception;
}
